home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / a_utils / decomp.lha / decomp / nodes.h < prev    next >
C/C++ Source or Header  |  1988-01-12  |  3KB  |  99 lines

  1. /*
  2.  * Module: nodes.h
  3.  *
  4.  * Author: J. Reuter
  5.  *
  6.  * This module defines the structures and constants used to build
  7.  * nodes of basic blocks and structured blocks.  These are used
  8.  * by the structuring code.
  9.  */
  10.  
  11. /* basic block node types */
  12. #define N_UNREACH 0
  13. #define N_FLOW 1
  14. #define N_BRANCH 2
  15. #define N_CASE 3
  16. #define N_END 4
  17. #define N_IF 5
  18.  
  19. /* structuring node types */
  20. #define N_LOOP 6
  21. #define N_ITER 7
  22. #define N_ANDIF 8
  23. #define N_ORIF 9
  24. #define N_SWITCH 10
  25. #define N_GOTO 11
  26. #define N_BREAK 12
  27. #define N_CONTINUE 13
  28. #define N_CASELAB 14
  29. #define N_WHILE 15
  30. #define N_UNTIL 16
  31.  
  32. #define MAX_TYPES 17
  33. #define MAX_CHILD 2
  34. #define MAX_VAR 4
  35.  
  36. /*
  37.  * Static information describing the node information
  38.  */
  39. struct node_info {
  40.     int num_children;        /* number of children in tree structure */
  41.     char *name;            /* symbolic name of node type */
  42. };
  43.  
  44. /*
  45.  * The node structure is constructed to hold the basic blocks.
  46.  * It is then munged by the structuring code to hold the program
  47.  * heirarchy.
  48.  */
  49. struct node {
  50.     int node_type;        /* see note types above */
  51.     address start_address;    /* beginning code address of this block */
  52.     address end_address;    /* end code address ... */
  53.     int num_arcs;        /* number of node exit arcs */
  54.     address *arcs;        /* pointer to array of node exit arcs */
  55.     union {            /* a scratch area, used many ways */
  56.     int scratch;
  57.     struct node *pscratch;
  58.     } node_un;
  59.     int right_sibling;        /* right sibling of node in hier. */
  60.     int reach;
  61.     int child[MAX_CHILD];    /* children of node in hier. */
  62.     int varpart[MAX_VAR];    /* variant use fields */
  63. };
  64.  
  65. #define node_scratch node_un.scratch
  66. #define node_pscratch node_un.pscratch
  67.  
  68. #define NONE -1            /* empty arc (0 is a legal address) */
  69. #define DEFINED( N ) ( N >= 0 )
  70.  
  71. /* N_ITER variant parts */
  72. #define V_NEXT 0    /* N_THEN condition for iteration for WHILE or UNTIL */
  73. #define V_FATHER 1        /* father of v */
  74.  
  75. /* N_WHILE, N_UNTIL variant parts */
  76. #define V_LOOP_PRED 2        /* loop predicate */
  77.  
  78.  
  79. /* N_IF, N_THEN parts */
  80. #define V_NEGATE 0        /* TRUE if predicate negated */
  81. #define V_PRED1 1        /* predicate 1 for N_ANDIF, N_ORIF */
  82. #define V_PRED2 2        /* predicate 2 for N_ANDIF, N_ORIF */
  83. #define THEN_ARC 1        /* arc number of true branch */
  84. #define ELSE_ARC 0        /* arc number of false branch */
  85.  
  86. /* N_CASELAB parts */
  87. #define V_CASESLOT 0        /* branch slot in case instruction */
  88.  
  89. /* N_CASE parts */
  90. #define V_BASE 0        /* case instruction base operand */
  91. #define V_LIMIT 1        /* case instruction limit operand */
  92.  
  93. extern int node_count;
  94. extern int node_max;
  95. extern struct node **node_array;
  96. extern struct node_info node_info[MAX_TYPES];
  97.  
  98. extern struct node *get_node();
  99.